/*
    线程tid:每一个线程的库级别的tcb的起始地址。为什么要以起始地址作为线程tid呢？
    1、里面存的地址
    2、在用户空间，共享区。
    3、是虚拟地址，可以直接访问。

    未来一个线程想要获取它自己的属性，拿着这个地址就可以直接找到。
*/

#include <iostream>
#include <unistd.h>
#include <string>

using namespace std;


string toHex(pthread_t tid)
{
    char hex[64];
    snprintf(hex, sizeof(hex), "%p", tid);

    return hex;
}

void* threadRoutine(void* args)
{
    while(true)
    {
        cout << "thread id: " << toHex(pthread_self()) << endl;
        sleep(1);
    }
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, threadRoutine, (void*)"thread 1");

    cout << "main thread create thread done, new thread id: " << toHex(tid) << endl;
    pthread_join(tid, nullptr);
    return 0;
}